www.gusucode.com > 通过ODBC API实现对数据库的访问JavaScript源码程序 > 通过ODBC API实现对数据库的访问/ODBCApiDataManager/ODBCApiDataManager/DbLink/DbLink.cpp
#include "StdAfx.h" #include ".\dblink.h" CDbLink::CDbLink(void) { m_strDSN = "master"; m_strUSER = "hskj"; m_strPWD = "newtech"; henv = SQL_NULL_HANDLE; hdbc = SQL_NULL_HANDLE; m_bLink = FALSE; OpenDatabase(); } CDbLink::~CDbLink(void) { if(m_bLink) { SQLDisconnect(hdbc); SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); m_bLink = FALSE; } } CDbLink::CDbLink(CString strDSN, CString strUSER, CString strPWD) { henv = SQL_NULL_HANDLE; hdbc = SQL_NULL_HANDLE; m_strDSN = strDSN; m_strUSER = strUSER; m_strPWD = strPWD; m_bLink = FALSE; OpenDatabase(); } BOOL CDbLink::OpenDatabase() { SQLINTEGER cbLenth = 0 ; SQLRETURN retcode; retcode = SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"SQL Server","DSN=master\0Server=(local)\0Database=master\0\0"); if(!retcode) { AfxMessageBox("系统数据源配置失败!"); return FALSE; } retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv) ; if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { retcode = SQLConnect(hdbc, (SQLCHAR*)(LPCTSTR)m_strDSN, SQL_NTS, (SQLCHAR*)(LPCTSTR)m_strUSER, SQL_NTS, (SQLCHAR*)(LPCTSTR)m_strPWD, SQL_NTS); if (!(retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)) { AfxMessageBox("数据库连接失败!") ; SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); return FALSE; } else { m_bLink = TRUE; return TRUE; } } else { AfxMessageBox("连接句柄分配出错") ; SQLFreeHandle(SQL_HANDLE_DBC, hdbc); SQLFreeHandle(SQL_HANDLE_ENV, henv); return FALSE; } } else { AfxMessageBox("属性设置出错!") ; SQLFreeHandle(SQL_HANDLE_ENV, henv); return FALSE; } } else { AfxMessageBox("环境变量分配出错!") ; SQLFreeHandle(SQL_HANDLE_ENV, henv); return FALSE; } } BOOL CDbLink::IsDatabaseExisted(CString strDbName) { SQLHSTMT hstmt ; SQLRETURN retcode; SQLINTEGER cbLenth = 0 ; CString strSQL; strSQL.Format("SELECT * FROM sysdatabases WHERE name='%s'", strDbName); retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) == SQL_ERROR) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return FALSE; } if((SQLFetch(hstmt) == SQL_SUCCESS) || (SQLFetch(hstmt) == SQL_SUCCESS_WITH_INFO)) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return TRUE; } else { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return FALSE; } } else { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return FALSE; } } BOOL CDbLink::CreateDatabase(CString strDbName) { SQLHSTMT hstmt ; SQLRETURN retcode; SQLINTEGER cbLenth = 0 ; BOOL bIsExisted = IsDatabaseExisted(strDbName); if(bIsExisted) { return TRUE; } else { CString strSQL; strSQL.Format("CREATE DATABASE [%s] ON (NAME = N'%s_dat', FILENAME = N'D:\\导出数据库文件\\%s.mdf' ,SIZE = 39, FILEGROWTH = 2) LOG ON (NAME = N'%s_log', FILENAME = N'D:\\导出数据库文件\\%s.ldf' , SIZE = 2, FILEGROWTH = 1) COLLATE Chinese_PRC_CI_AS", strDbName,strDbName,strDbName,strDbName,strDbName); retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { if (SQLExecDirect(hstmt, (SQLCHAR*)(LPCTSTR)strSQL, SQL_NTS) != SQL_ERROR) { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return TRUE; } else { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return FALSE; } } else { SQLFreeHandle(SQL_HANDLE_STMT, hstmt); return FALSE; } } }